package com.duoec.dw.lineage.enums;

/**
 * 数据流转方向
 * <p>
 * 定义：0表示hive表 1表示mysql 2表示mongodb ...
 * @see DatabaseTypeEnum
 * 十位数表示来源库类型，个位数表示去
 * 0 = hive -> hive
 * 1 = hive -> mysql
 * 2 = hive -> mongodb
 * 10= mysql -> hive
 *
 * @author xuwenzhen
 */
public enum DataDirectionEnum {
    /**
     * hive -> hive
     */
    HIVE_2_HIVE(0),

    /**
     * hive -> mysql
     */
    HIVE_2_MYSQL(1),

    /**
     * hive -> mongodb
     */
    HIVE_2_MONGODB(2),

    /**
     * mysql -> hive
     */
    MYSQL_2_HIVE(10),

    /**
     * mongodb -> hive
     */
    MONGODB_2_HIVE(20),
    ;

    /**
     * 值
     */
    private final Integer value;

    DataDirectionEnum(Integer value) {
        this.value = value;
    }

    public Integer getValue() {
        return value;
    }

    /**
     * 目标表是否是MySql
     * @param dataDirection 数据流转方向值
     * @return 目标表是否是MySql
     */
    public static boolean toMySql(Integer dataDirection) {
        if (dataDirection == null) {
            return false;
        }
        return dataDirection % 10 == DatabaseTypeEnum.MYSQL.getValue();
    }

    /**
     * 源表是否是MySql
     * @param dataDirection 数据流转方向值
     * @return 源表是否是MySql
     */
    public static boolean fromMySql(Integer dataDirection) {
        if (dataDirection == null) {
            return false;
        }
        return dataDirection / 10 == DatabaseTypeEnum.MYSQL.getValue();
    }

    /**
     * 目标表是否是hive
     * @param dataDirection 数据流转方向值
     * @return 目标表是否是hive
     */
    public static boolean toHive(Integer dataDirection) {
        if (dataDirection == null) {
            return true;
        }
        return dataDirection % 10 == DatabaseTypeEnum.HIVE.getValue();
    }

    /**
     * 源表是否是hive
     * @param dataDirection 数据流转方向值
     * @return 源表是否是hive
     */
    public static boolean fromHive(Integer dataDirection) {
        if (dataDirection == null) {
            return true;
        }

        return dataDirection / 10 == DatabaseTypeEnum.HIVE.getValue();
    }
}
